package com.hsmpay.utils;

import java.security.SecureRandom;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;
/**
 *  id 工具类
 * @author lishijie
 *
 */
public class Identities {

	private static SecureRandom random = new SecureRandom();

	/**
	 * 使用SecureRandom随机生成Long.
	 */
	public static long randomLong() {
		return Math.abs(random.nextLong());
	}

	/**
	 * 封装JDK自带的UUID, 通过Random数字生成, 中间无-分割.
	 */
	public static String uuid() {
		return UUID.randomUUID().toString().replaceAll("-", "");
	}

	/**
	 * 封装JDK自带的UUID, 通过Random数字生成, 中间有-分割.
	 */
	public static String uuid2() {
		return UUID.randomUUID().toString();
	}

	/**
	 * 根据时间数字生成20位ID
	 * 
	 * @param args
	 */
	public static String toTimeNumber() {
		return System.currentTimeMillis() + generateRandomDigitString(7);
	}

	/**
	 * 根据时间生成20位ID
	 * 
	 * @return 2015 1205 1001 3145 4 取到毫秒 + 3位 随机数
	 */
	public static String toCurrentTime() {
		return currentTime() + generateRandomDigitString(3);
	}

	/**
	 * 产生指定长度的无规律数字字符串
	 * 
	 * @param aLength
	 *            生成的随机数的长度
	 * @return 生成的随机字符串 throws 卡号生成异常
	 */
	private static String generateRandomDigitString(int aLength) {
		SecureRandom tRandom = new SecureRandom();
		long tLong;
		String aString = "";

		tRandom.nextLong();
		tLong = Math.abs(tRandom.nextLong());
		aString = (String.valueOf(tLong)).trim();
		while (aString.length() < aLength) {
			tLong = Math.abs(tRandom.nextLong());
			aString += (String.valueOf(tLong)).trim();
		}
		aString = aString.substring(0, aLength);

		return aString;
	}

	/**
	 * 20151205100131454 取到毫秒
	 * 
	 * @param date
	 *            as 2014-09-08 字符串形式的日期
	 * @throws ParseException
	 */
	private static String currentTime() {
		SimpleDateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmssSSS");
		Date currentTime = new Date();// 得到当前系统时间
		return formatter.format(currentTime);
	}

}
